home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- '''distutils.unixccompiler
-
- Contains the UnixCCompiler class, a subclass of CCompiler that handles
- the "typical" Unix-style command-line C compiler:
- * macros defined with -Dname[=value]
- * macros undefined with -Uname
- * include search directories specified with -Idir
- * libraries specified with -lllib
- * library search directories specified with -Ldir
- * compile handled by \'cc\' (or similar) executable with -c option:
- compiles .c to .o
- * link static library handled by \'ar\' command (possibly with \'ranlib\')
- * link shared library handled by \'cc -shared\'
- '''
- __revision__ = '$Id: unixccompiler.py,v 1.56 2004/08/29 16:40:55 loewis Exp $'
- import os
- import sys
- from types import StringType, NoneType
- from copy import copy
- from distutils import sysconfig
- from distutils.dep_util import newer
- from distutils.ccompiler import CCompiler, gen_preprocess_options, gen_lib_options
- from distutils.errors import DistutilsExecError, CompileError, LibError, LinkError
- from distutils import log
-
- class UnixCCompiler(CCompiler):
- compiler_type = 'unix'
- executables = {
- 'preprocessor': None,
- 'compiler': [
- 'cc'],
- 'compiler_so': [
- 'cc'],
- 'compiler_cxx': [
- 'cc'],
- 'linker_so': [
- 'cc',
- '-shared'],
- 'linker_exe': [
- 'cc'],
- 'archiver': [
- 'ar',
- '-cr'],
- 'ranlib': None }
- if sys.platform[:6] == 'darwin':
- executables['ranlib'] = [
- 'ranlib']
-
- src_extensions = [
- '.c',
- '.C',
- '.cc',
- '.cxx',
- '.cpp',
- '.m']
- obj_extension = '.o'
- static_lib_extension = '.a'
- shared_lib_extension = '.so'
- dylib_lib_extension = '.dylib'
- static_lib_format = shared_lib_format = dylib_lib_format = 'lib%s%s'
- if sys.platform == 'cygwin':
- exe_extension = '.exe'
-
-
- def preprocess(self, source, output_file = None, macros = None, include_dirs = None, extra_preargs = None, extra_postargs = None):
- (ignore, macros, include_dirs) = self._fix_compile_args(None, macros, include_dirs)
- pp_opts = gen_preprocess_options(macros, include_dirs)
- pp_args = self.preprocessor + pp_opts
- if output_file:
- pp_args.extend([
- '-o',
- output_file])
-
- if extra_preargs:
- pp_args[:0] = extra_preargs
-
- if extra_postargs:
- pp_args.extend(extra_postargs)
-
- pp_args.append(source)
- if self.force and output_file is None or newer(source, output_file):
- if output_file:
- self.mkpath(os.path.dirname(output_file))
-
-
- try:
- self.spawn(pp_args)
- except DistutilsExecError:
- msg = None
- raise CompileError, msg
- except:
- None<EXCEPTION MATCH>DistutilsExecError
-
-
- None<EXCEPTION MATCH>DistutilsExecError
-
-
- def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
-
- try:
- self.spawn(self.compiler_so + cc_args + [
- src,
- '-o',
- obj] + extra_postargs)
- except DistutilsExecError:
- msg = None
- raise CompileError, msg
-
-
-
- def create_static_lib(self, objects, output_libname, output_dir = None, debug = 0, target_lang = None):
- (objects, output_dir) = self._fix_object_args(objects, output_dir)
- output_filename = self.library_filename(output_libname, output_dir = output_dir)
- if self._need_link(objects, output_filename):
- self.mkpath(os.path.dirname(output_filename))
- self.spawn(self.archiver + [
- output_filename] + objects + self.objects)
- if self.ranlib:
-
- try:
- self.spawn(self.ranlib + [
- output_filename])
- except DistutilsExecError:
- msg = None
- raise LibError, msg
- except:
- None<EXCEPTION MATCH>DistutilsExecError
-
-
- None<EXCEPTION MATCH>DistutilsExecError
- else:
- log.debug('skipping %s (up-to-date)', output_filename)
-
-
- def link(self, target_desc, objects, output_filename, output_dir = None, libraries = None, library_dirs = None, runtime_library_dirs = None, export_symbols = None, debug = 0, extra_preargs = None, extra_postargs = None, build_temp = None, target_lang = None):
- (objects, output_dir) = self._fix_object_args(objects, output_dir)
- (libraries, library_dirs, runtime_library_dirs) = self._fix_lib_args(libraries, library_dirs, runtime_library_dirs)
- lib_opts = gen_lib_options(self, library_dirs, runtime_library_dirs, libraries)
- if type(output_dir) not in (StringType, NoneType):
- raise TypeError, "'output_dir' must be a string or None"
-
- if output_dir is not None:
- output_filename = os.path.join(output_dir, output_filename)
-
- if self._need_link(objects, output_filename):
- ld_args = objects + self.objects + lib_opts + [
- '-o',
- output_filename]
- if debug:
- ld_args[:0] = [
- '-g']
-
- if extra_preargs:
- ld_args[:0] = extra_preargs
-
- if extra_postargs:
- ld_args.extend(extra_postargs)
-
- self.mkpath(os.path.dirname(output_filename))
-
- try:
- if target_desc == CCompiler.EXECUTABLE:
- linker = self.linker_exe[:]
- else:
- linker = self.linker_so[:]
- if target_lang == 'c++' and self.compiler_cxx:
- linker[0] = self.compiler_cxx[0]
-
- self.spawn(linker + ld_args)
- except DistutilsExecError:
- msg = None
- raise LinkError, msg
- except:
- None<EXCEPTION MATCH>DistutilsExecError
-
-
- None<EXCEPTION MATCH>DistutilsExecError
- log.debug('skipping %s (up-to-date)', output_filename)
-
-
- def library_dir_option(self, dir):
- return '-L' + dir
-
-
- def runtime_library_dir_option(self, dir):
- compiler = os.path.basename(sysconfig.get_config_var('CC'))
- if sys.platform[:6] == 'darwin':
- return '-L' + dir
- elif sys.platform[:5] == 'hp-ux':
- return '+s -L' + dir
- elif sys.platform[:7] == 'irix646' or sys.platform[:6] == 'osf1V5':
- return [
- '-rpath',
- dir]
- elif compiler[:3] == 'gcc' or compiler[:3] == 'g++':
- return '-Wl,-R' + dir
- else:
- return '-R' + dir
-
-
- def library_option(self, lib):
- return '-l' + lib
-
-
- def find_library_file(self, dirs, lib, debug = 0):
- shared_f = self.library_filename(lib, lib_type = 'shared')
- dylib_f = self.library_filename(lib, lib_type = 'dylib')
- static_f = self.library_filename(lib, lib_type = 'static')
- for dir in dirs:
- shared = os.path.join(dir, shared_f)
- dylib = os.path.join(dir, dylib_f)
- static = os.path.join(dir, static_f)
- if os.path.exists(dylib):
- return dylib
- continue
- if os.path.exists(shared):
- return shared
- continue
- if os.path.exists(static):
- return static
- continue
-
-
-
-